package TestDome0;

/**
 * Created with IntelliJ IDEA
 * Description:实例内部类
 * User:恋恋
 * Date:2022-09-07
 * Time:9:35
 */
public class Test {

    InnerTest date3=new InnerTest();

    public void methodA() {

        System.out.println(date3.f);
    }
    private int a=10;
    static  int b=20;
    int c=30;
    protected int d=40;
    public void methodB(){
        System.out.println(b);
    }
    //实例内部类
    //*1、实例内部类不能定义静态成员
    // 2、内部类中可以直接访问外部类中：任意访问限定符修饰的成员，包括静态成员变量
    class InnerTest{
        private int a=111;
        //实例内部类中不能定义静态变量
       public static final int e=100;
        int f=70;
        protected int g=80;

       //内部类中
        public void print(){
            //如果要访问外部类同名成员的时候，必须：外部类名称.this.同名成员名字
            System.out.println("外部类的成员变量"+Test.this.a);
            //如果外部类和内部类中具有相同名称成员时，优先访问的是内部类自己
            System.out.println("内部类的成员变量"+a);
            System.out.println(b);
            System.out.println(c);
            System.out.println(d);
            System.out.println(f);
            System.out.println(g);
        }
    }
    //实例内部类不能定义静态方法
    public void methodAInner(){
        b=200;//静态成员变量也可以访问
        methodA();
        methodB();
    }

    public static void main(String[] args) {
        //如何获取实例内部类的对象
        //首先先获取外部类的对象，再创建内部类的对象
       // 第一种方法：
        Test.InnerTest date1=new Test().new InnerTest();
        //第二种方法：
        Test sc=new Test();
        Test.InnerTest date2=sc.new InnerTest();
        date2.print();

    }
}
